import sdk from 'sdk'
import {getRegionId} from 'api'
import storage from 'utils/helper/storage'
import {isArray} from 'utils/helper/validator'
import {DEFAULT_CITY} from '@/model/enum'

export default {
  methods: {
    /**
     * 获取缓存城市
     */
    $city_getCacheCity() {
      let cacheRegion = storage.get('__region_city__')

      if (cacheRegion && cacheRegion.regionId && cacheRegion.name) {
        return cacheRegion
      } else {
        return null
      }
    },
    /**
     * 自动定位城市
     */
    $city_getLocation() {
      return new Promise((resolve, reject) => {
        sdk.getLocation().then(res => {
          let {city='', latitude, longitude} = res
          let params = {
            lat: latitude,
            lng: longitude
          }

          if (city) { // 小程序拿不到城市，需要后端处理
            city = city.replace(/市$/, '')
            params.name = city
          }
          getRegionId(params).then(result => {
            let {regionId, name} = result.result || {}
            
            resolve({
              ...res,
              regionId,
              city: name || city,
            })
          }).catch(reject)
        }).catch(reject)
      })
      // .catch(res => {
      //   // TODO 识别无权限并弹框询问是否去设置权限
      //   // #ifdef MP-WEIXIN
      //   uni.showModal({
      //     title: '获取定位失败',
      //     content: '请进入小程序的“设置”界面勾选权限',
      //     showCancel: true,
      //     confirmText: '去设置',
      //     success(res) {
      //       if (res.confirm) {
      //         uni.openSetting()
      //       }
      //     }
      //   })
      //   // #endif
      // })
    },
    /**
     * 更新最近浏览的城市
     * @param {Object} city 新增最近浏览的城市 
     */
    $city_updateLatestCity(city) {
      if (city.regionId && city.name) {
        /**
         * 检查缓存的城市是否有重复值（缓存的数据长度不能大于2条）
         * 1. 若有重复，则交换首位和重复位的位置
         * 2. 若无重复，则将新值放在首位，去掉最后一个
         */
        let latestCity = storage.get('__city_latest__')

        // 若返回为空，则默认为上海（页面初始化都是会先请求上海数据）
        if (!latestCity || !isArray(latestCity)) latestCity = [DEFAULT_CITY]

        let lastIndex = latestCity.findIndex(cityItem => cityItem.regionId == city.regionId)

        // 上次更新和本次更新一致
        if (lastIndex === 0) return

        latestCity.unshift(city)
        latestCity.splice(2)

        storage.set('__city_latest__', latestCity)
      }
    },

    /**
     * 获取最近浏览的城市
     */
    $city_getLatestCity() {
      let latestCity = storage.get('__city_latest__') || []

      // 若返回为空，则默认为上海（页面初始化都是会先请求上海数据）
      if (!latestCity || !latestCity.length) {
        latestCity = [DEFAULT_CITY]
        storage.set('__city_latest__', latestCity)
      }

      // 检查每一项值的合法性
      latestCity.forEach((city, i) => {
        if (!latestCity[i] || !latestCity[i].regionId) {
          latestCity.splice(i, 1)
        }
      })

      return latestCity
    }
  }
}